티스토리 뷰

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    // 크롤링할 URL 리스트
    urls := []string{
        "https://www.example.com",
        "https://www.example.com/page1",
        "https://www.example.com/page2",
    }

    // 응답 본문을 받을 채널
    respChan := make(chan string)

    // URL 리스트를 순회하며 각 URL을 처리하는 고루틴을 생성합니다.
    for _, url := range urls {
        go func(url string) {
            respBody, err := httpGet(url)
            if err != nil {
                fmt.Printf("Error getting response from %s: %v\n", url, err)
                return
            }
            respChan <- fmt.Sprintf("Response from %s: %s\n", url, respBody)
        }(url)
    }

    // 응답을 받아서 출력합니다.
    for range urls {
        fmt.Print(<-respChan)
    }
}

// HTTP GET 요청을 보내고 응답 본문을 []byte 형태로 반환합니다.
func httpGet(url string) ([]byte, error) {
    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return nil, err
    }
    return body, nil
}
  • goroutine을 사용하여 각 URL을 병렬로 처리
  • respChan 채널을 생성하고, 각 goroutine에서 응답을 보내면 채널 추가
  • urls 리스트의 크기만큼 goroutine으로부터 응답을 받아서 출력합니다.

'공부합시다 > Golang' 카테고리의 다른 글

Redis pub/sub in golang  (0) 2023.05.04
GVM으로 go설치하기  (0) 2023.03.30
Golang으로 Todo 만들기  (0) 2022.01.21
댓글